package com.midea.ext.testform.util;

import java.math.BigDecimal;
import java.math.RoundingMode;

public class CalculateUtil {
	/** 
	 * 提供精确的加法运算。 
	 * @param v1 被加数 
	 * @param v2 加数 
	 * @return 两个参数的和 
	 */ 
	public static String add(String v1,String v2){ 
		try {
			if(v1 ==null || v1.equals("") || v2 == null || v2.equals("")) {
				return ""; 
			}
			BigDecimal b1 = BigDecimal.valueOf(Double.parseDouble(v1)); 
			BigDecimal b2 = BigDecimal.valueOf(Double.parseDouble(v2)); 
			return b1.add(b2) +""; 
		} catch (Exception e) {
			// TODO: handle exception
		}
		return ""; 
	} 
	/** 
	 * 提供精确的减法运算。 
	 * @param v1 被减数 
	 * @param v2 减数 
	 * @return 两个参数的差 
	 */ 
	public static String sub(String v1,String v2){ 
		try {
			if(v1 ==null || v1.equals("") || v2 == null || v2.equals("")) {
				return ""; 
			}
			BigDecimal b1 = BigDecimal.valueOf(Double.parseDouble(v1)); 
			BigDecimal b2 = BigDecimal.valueOf(Double.parseDouble(v2)); 
			return b1.subtract(b2) +""; 
		} catch (Exception e) {
			// TODO: handle exception
		}
		return ""; 
	} 
	/** 
	 * 提供精确的乘法运算。 
	 * @param v1 被乘数 
	 * @param v2 乘数 
	 * @return 两个参数的积 
	 */ 
	public static String mul(String v1,String v2){ 
		try {
			if(v1 ==null || v1.equals("") || v2 == null || v2.equals("")) {
				return ""; 
			}
			BigDecimal b1 = BigDecimal.valueOf(Double.parseDouble(v1)); 
			BigDecimal b2 = BigDecimal.valueOf(Double.parseDouble(v2));
			return b1.multiply(b2) +"";
		} catch (Exception e) {
			// TODO: handle exception
		}
		return ""; 
	}

	public static String mul(String v1,String v2,int scale){
		try {
			if(v1 ==null || v1.equals("") || v2 == null || v2.equals("")) {
				return "";
			}
			BigDecimal b1 = BigDecimal.valueOf(Double.parseDouble(v1));
			BigDecimal b2 = BigDecimal.valueOf(Double.parseDouble(v2));
			return b1.multiply(b2).setScale(scale,RoundingMode.HALF_UP) +"";
		} catch (Exception e) {
			// TODO: handle exception
		}
		return "";
	}

	/** 
	 * 提供（相对）精确的除法运算。当发生除不尽的情况时，由scale参数指 
	 * 定精度，以后的数字四舍五入。 
	 * @param v1 被除数 
	 * @param v2 除数 
	 * @param scale 表示表示需要精确到小数点以后几位。 
	 * @return 两个参数的商 
	 */ 
	public static String div(String v1,String v2,int scale){ 
		try {
			if(v1 ==null || v1.equals("") || v2 == null || v2.equals("")) {
				return ""; 
			}
			BigDecimal b1 = BigDecimal.valueOf(Double.parseDouble(v1)); 
			BigDecimal b2 = BigDecimal.valueOf(Double.parseDouble(v2)); 
			return b1.divide(b2,scale,BigDecimal.ROUND_HALF_UP) +""; 
		} catch (Exception e) {
			// TODO: handle exception
		}
		return ""; 
	} 
	
	/**
	 * @return
	 */
	public static double getTwoCount(double conclusionCompetingGoodsMideaScore) {
		BigDecimal a = BigDecimal.valueOf(conclusionCompetingGoodsMideaScore);
		BigDecimal b =a.setScale(2, RoundingMode.HALF_UP);//保留两位小数
		return b.doubleValue();
	}

	public static void main(String[] args) {
		String sub = sub("204.022", "204.124");
		System.out.println(sub);
		String div1 = div(sub, "204.124", 4);
		System.out.println(div1);
		String mul = mul(div1, "100",2);
		System.out.println(mul);
		String div = mul(div(sub("204.022", "204.124"), "204.124",4),"100",2)+"%";
		System.out.println(div);
	}
}
